//
// Copyright (c) 2009 All Right Reserved
//
// vl
//
// 2009-01-01
// Contains ...
namespace LargoCommon.Composer
{
using System.IO;
using Abstract;
using Localization;
using Music;
///
/// Block Composer.
///
public class BlockComposer
{
#region Public properties
///
/// Gets or sets the source block.
///
///
/// The source block.
///
public MusicalBlock SourceBlock { get; set; }
///
/// Gets or sets the composed block.
///
///
/// The composed block.
///
public MusicalBlock ComposedBlock { get; set; }
#endregion
#region Public methods - Composition
///
/// Prepares the tracks for composition.
///
public void PrepareTracksForComposition()
{
foreach (var line in this.ComposedBlock.Strip.Lines)
{
if (line == null) {
continue;
}
if (line.Purpose == LinePurpose.Composed) {
line.Reset();
}
line.FirstStatus.MelodicVariety = new MusicalVariety(MusicalSettings.Singleton);
}
}
///
/// Composes the music.
///
/// The given source block.
///
/// Returns value.
///
public MusicalBundle ComposeMusic(MusicalBlock givenSourceBlock)
{
this.SourceBlock = givenSourceBlock;
this.ComposedBlock = this.SourceBlock;
//// var model =
HarmonicModel.GetNewModel(this.SourceBlock);
this.PrepareTracksForComposition();
ProcessLogger.Singleton.SendLogEvent(this.SourceBlock.Header.Name, LocalizedMusic.String("Initialization..."), 0);
BodyComposer bodyComposer = new BodyComposer();
//// Main compositional method.
bodyComposer.ComposeMusic(this.ComposedBlock.Body);
//// 2019/01
//// When tones are saved without instrument or loudness ...
foreach (var bar in this.ComposedBlock.Body.Bars) {
bar.SendStatusToTones();
}
this.ComposedBlock.ConvertBodyToStrip(true, true);
ProcessLogger.Singleton.SendLogEvent(this.SourceBlock.Header.Name, LocalizedMusic.String("Finalization..."), 0);
var filename = this.SourceBlock.FullName;
int variant = 0;
while (File.Exists(filename))
{
variant++;
filename = this.SourceBlock.FullName + variant.ToString();
}
var composedFile = MusicalBundle.GetEnvelopeOfBlock(this.ComposedBlock, filename);
return composedFile;
}
#endregion
}
}